home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_5.lha / 5_5 / 5_5b2.c < prev    next >
Text File  |  1993-08-08  |  922b  |  51 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. / Evaluate the given expression tree
  6. tatic int treeval(tree* head)
  7.  
  8.    if (head)
  9. switch (head->type)
  10.     {
  11.     case PLUS:
  12.     return treeval(head->left) +
  13.            treeval(head->right);
  14.  
  15.     case MINUS:
  16.     if (head->right)
  17.         return treeval(head->left) -
  18.            treeval(head->right);
  19.     else
  20.         return -treeval(head->left);
  21.  
  22.     case DIV:
  23.         int l = treeval(head->left);
  24.         int r = treeval(head->right);
  25.     if (r != 0)
  26.         return l / r;
  27.     else
  28.         return error("division by 0");
  29.  
  30.     case MUL:
  31.     return treeval(head->left) *
  32.            treeval(head->right);
  33.  
  34.     case NUMBER:
  35.     return head->value;
  36.  
  37.     case LP:
  38.     return treeval(head->left);
  39.  
  40.     case RP:
  41.     case END:
  42.     default:
  43.     error("invalid type within tree");
  44.     break;
  45.     }
  46.  
  47.    else
  48. error("NULL node found");
  49.    return 0;
  50.  
  51.